﻿namespace HanoiTower
{
    internal class Program
    {
        /// <summary>
        /// 汉诺塔
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Console.WriteLine("选择你的汉诺塔层数");
            int number = Convert.ToInt32(Console.ReadLine());
            hanoiTower(number, 'a', 'b', 'c');
        }
        /// <summary>
        /// 定义汉诺塔函数-将第一根柱子上的盘子全部移动到第二根柱子上（一次移动一个，小盘子在大盘子上）
        /// </summary>
        /// <param name="number">汉诺塔层数-盘子个数</param>
        /// <param name="a">第一根柱子</param>
        /// <param name="b">第二根柱子</param>
        /// <param name="c">第三根柱子</param>
        private static void hanoiTower(int number, char a, char b, char c)
        {
            //递归原理—数学归纳法，n=1成立，假设n-1成立，此时N成立。故所有的都成立
            //递归结束条件
            if (number == 1)
            {
                Console.WriteLine($"{a}->{b}");
            }
            else
            {
                //将N个盘子看成N-1和最底下盘子的组合，先把N-1移到C，把最底下的移到B，再把N-1移动到B
                hanoiTower(number - 1, a, c, b);
                Console.WriteLine($"{a}->{b}");
                hanoiTower(number - 1, c, b, a);
            }
        }
    }
}